
`ifndef STR_PKG_SVH
`define STR_PKG_SVH

package str_pkg;

   typedef string str_queue_t[$];


   // find any char in find_str
   function automatic int find_first_of(input string str, input string find_str);
      for(int i=0;i<str.len();i++)
	for(int j=0;j<find_str.len();j++)
	  if(str[i] == find_str[j])
	    return i;
      return -1;
   endfunction

   function automatic int find_first_not_of(input string str, input string find_str);
      for(int i=0;i<str.len();i++)
	begin
	   bit flag = 0;
	   for(int j=0;j<find_str.len();j++)
	     if(str[i] == find_str[j])
	       flag = 1;
	   
	   if(flag==0)
	     return i;
	end
      return -1;
   endfunction

   
   function automatic int find_last_of(input string str, input string find_str);
      for(int i=str.len()-1;i>=0;i--)
	for(int j=0;j<find_str.len();j++)
	  if(str[i] == find_str[j])
	    return i;
      return -1;
   endfunction
      
   function automatic int find_last_not_of(input string str, input string find_str);
      for(int i=str.len()-1;i>=0;i--)
	begin
	   bit flag = 0;
	   for(int j=0;j<find_str.len();j++)
	     if(str[i] == find_str[j])
	       flag = 1;
	   
	   if(flag==0)
	     return i;
	end
      return -1;
   endfunction // find_last_not_of

   function automatic int find(input string str, input string find_str, input int start_pos=0);
      for(int i=start_pos;i<str.len();i++)
   	begin
   	   bit equal = 1;
   	   for(int j=0;j<find_str.len();j++)
   	     if(str[i+j] != find_str[j]) begin
	       equal = 0;
		break;
	     end
	   if(equal)
	     return i;
	end // for (int i=0;i<str.len();i++)
      return -1;
   endfunction // find

      
   function automatic void strip(inout string str);
      int start_idx, end_idx;
      start_idx = find_first_not_of(str, " \t\n\r");
      end_idx = find_last_not_of(str, " \t\n\r");
      str = str.substr(start_idx, end_idx);
   endfunction // strip


   function automatic str_queue_t split(input string str, input string sep);
      str_queue_t queue;
      int 	  start = 0;
      int 	  pos;
      
      while( (pos=find(str,sep,start)) >= 0) begin
	 queue.push_back(str.substr(start, pos-1));
	 start = pos+sep.len();
      end
      queue.push_back(str.substr(start, str.len()-1));
      return queue;
   endfunction // split
   
	   

endpackage // str_pkg
   
   
`endif /* STR_PKG_SVH */

